﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Entity;
using Business;

namespace CPEBookWeb
{
    public class DemandesAjoutView
    {

        // Classes CSS
        private const string cssDemandes = "demandes";
        private const string cssDemandesEncart = "demandes-encart";
        private const string cssDemandesImage = "demandes-image";
        private const string cssDemandesPicto = "demandes-picto";
        private const string cssDemandesLibelle = "demandes-libelle";
        private const string cssDemandesListe = "demandes-liste";
        private const string cssDemande = "demande";
        private const string cssDemandeIdentite = "demande-identite";
        private const string cssDemandeActions = "demande-actions";
        private const string cssDemandeBtnAccepter = "demande-btn-accepter";
        private const string cssDemandeBtnIgnorer = "demande-btn-ignorer";

        /// <summary>
        /// Liste des demandes d'ajout
        /// </summary>
        public List<AmitieUtilisateur> Demandes { get; set; }

        /// <summary>
        /// Handler écoutant les clics sur "Accepter" et "Ignorer"
        /// </summary>
        public EventHandler EcouteurDecision { get; set; }


        /// <summary>
        /// Génère une table contenant les demandes d'ajouts.
        /// </summary>
        /// <returns></returns>
        public Panel getTableDemandes()
        {
            Panel code = new Panel();

            // Ne génère aucun code s'il n'y a pas de demandes
            if(Demandes == null || Demandes.Count == 0)
                return code;

            // On génère l'en-tête
            ajouterCodeEntete(code);

            // On génère la liste des demandes
            ajouterCodeDemandes(code);

            // On retourne le code
            return code;
        }


        // Retourne un lien vers le profil utilisateur
        private HyperLink creerLienProfil(Utilisateur utilisateur)
        {
            HyperLink lien = new HyperLink();
            lien.NavigateUrl = "Profil.aspx?id=" + utilisateur.idutilisateur.ToString();
            lien.Text = utilisateur.prenom + " " + utilisateur.nom;
            return lien;
        }


        /// <summary>
        /// Ajoute le code de l'en-tête.
        /// </summary>
        /// <param name="code">Le code à enrichir</param>
        public void ajouterCodeEntete(Panel code)
        {
            // Génération du code
            string html = "<div id=\"" + cssDemandesEncart +"\">\n";
            html += "\t<div id=\"" + cssDemandesImage +"\"><img src=\"templates/images/ico-ajouter.png\" width=\"18\" height=\"18\" class=\"" + cssDemandesPicto + "\" alt=\"Demandes\" /></div>\n";
            html += "\t<div id=\"" + cssDemandesLibelle +"\">Demandes d'ajout :</div>\n";
            html += "</div>\n";

            // Ajout au panel
            code.Controls.Add(new LiteralControl(html));
        }


        /// <summary>
        /// Ajoute le code des demandes
        /// </summary>
        /// <param name="code">Le code à enrichir</param>
        public void ajouterCodeDemandes(Panel code)
        {
            // Génération du code
            Panel liste = new Panel();
            liste.CssClass = cssDemandesListe;

            foreach (AmitieUtilisateur demande in Demandes)
            {
                // Raccourcis
                Utilisateur utilisateur = demande.Utilisateur;

                // Panel contenant demandeur et actions
                Panel item = new Panel();
                item.CssClass = cssDemande;

                // Identité du demandeur
                Panel identite = new Panel();
                identite.CssClass = cssDemandeIdentite;
                identite.Controls.Add(creerLienProfil(utilisateur));

                // Bouton pour accepter
                Button btnAccepter = new Button();
                btnAccepter.ID = "BtnAccepterAmis_" + utilisateur.idutilisateur.ToString();
                btnAccepter.Text = "Accepter";
                btnAccepter.CommandName = "accepter";
                btnAccepter.CommandArgument = utilisateur.idutilisateur.ToString();
                if (EcouteurDecision != null)
                    btnAccepter.Click += EcouteurDecision;
                btnAccepter.CssClass = cssDemandeBtnAccepter;

                // Bouton pour ignorer
                Button btnIgnorer = new Button();
                btnIgnorer.ID = "BtnIgnorerAmis_" + utilisateur.idutilisateur.ToString();
                btnIgnorer.Text = "Ignorer";
                btnIgnorer.CommandName = "ignorer";
                btnIgnorer.CommandArgument = utilisateur.idutilisateur.ToString();
                if (EcouteurDecision != null)
                    btnIgnorer.Click += EcouteurDecision;
                btnIgnorer.CssClass = cssDemandeBtnIgnorer;

                // On ajoute les boutons
                Panel actions = new Panel();
                actions.CssClass = cssDemandeActions;
                actions.Controls.Add(btnAccepter);
                actions.Controls.Add(btnIgnorer);

                // On ajoute les deux panels à la liste
                item.Controls.Add(identite);
                item.Controls.Add(actions);

                // On ajoute enfin à la liste
                liste.Controls.Add(item);
            }

            // Ajout au panel
            code.Controls.Add(liste);
        }

    }
}